package com.example.demo.config;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Random;

/**
 * 统一异常处理
 */

// 1. 创建一个类, 并在类上表示 @ControllerAdvice
@ControllerAdvice
@ResponseBody
public class MyExHandler {

    /**
     * 拦截所有的空指针异常, 进行统一的数据返回.
     */
    @ExceptionHandler(NullPointerException.class)
    public HashMap<String, Object> nullException(NullPointerException e) {
        HashMap<String, Object> result = new HashMap<>();
        // 错误时候的状态码.
        result.put("code", -1);
        // 错误码的描述信息
        result.put("msg", "空指针异常: " + e.getMessage());
        result.put("data", null);

        return result;
    }

    /**
     * 拦截所有的算数异常, 进行统一的数据返回.
     */
    @ExceptionHandler(ArithmeticException.class)
    public HashMap<String, Object> numberException(ArithmeticException e) {
        HashMap<String, Object> result = new HashMap<>();
        // 错误时候的状态码.
        result.put("code", -1);
        // 错误码的描述信息
        result.put("msg", "算数异常: " + e.getMessage());
        result.put("data", null);

        return result;
    }

    /**
     *  保底处理异常
     */
    @ExceptionHandler(Exception.class)
    public HashMap<String, Object> exception(Exception e) {
        HashMap<String, Object> result = new HashMap<>();
        // 错误时候的状态码.
        result.put("code", -1);
        // 错误码的描述信息
        result.put("msg", "异常: " + e.getMessage());
        result.put("data", null);

        return result;
    }

}
